const simpleRange = (start, len) =>
    [...Array(len)].map((_, k) => {
        // 搞出了一个len的长度的数组 ，而不是 有一个len元素的数组
    // 怪不得 我是真正的傻逼 这样这函数就好理解了
    // 第二个参数是个 idx 
    // 列表里填充的数字是 start 加上下标的 

        // console.log("k");
        // console.log(k);
        // k  0--99  好像都有
        // 这代码怎么这么让人费解
        // console.log("start");
        // console.log(start);
        return start + k
    });
// 长度 是一个数字 展开了 是啥
const mySimpleRange = (start, len) => {
    let res = []
    let num = start
    for (let i = 0; i < len; i++) {
        res.push(num)
        num++
    }
    return res
}
// https://zhuanlan.zhihu.com/p/27235764
// https://zhuanlan.zhihu.com/p/27235764
const calculateFizzBuzz2 = (start, len) => {
    // let arr= [...Array(len)]
    // // 搞出了一个len的长度的数组 ，而不是 有一个len元素的数组
    // // 怪不得 我是真正的傻逼 这样这函数就好理解了
    // // 第二个参数是个 idx 
    // console.log("arr");
    // console.log(arr);
    // let  range= simpleRange(start, len)
    let range = mySimpleRange(start, len)
    // 这可否有什么区别
    // 就是产生了一个数组。。。
    // 非要写的不给人看吗。。 不过可能是因为我是废物吧 看不懂

    // 发现js 就是喜欢玩花的 所以讨厌啊 还是java好 适合我这种废物
    // 虽然跟java 不java 没关系吧 java 里也有stream了 现在 
    // 函数式编程 越来越多吧 
    console.log("range");
    console.log(range);
    // let result = simpleRange(start, len).map(v => {
    let result = range.map(v => {
        if (v % 3 === 0 && v % 5 === 0) {
            return 'FizzBuzz';
        } else if (v % 3 === 0) {
            return 'Fizz';
        } else if (v % 5 === 0) {
            return 'Buzz';
        }
        return v;
    });
    // 1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28,
    // 1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28, 29, FizzBuzz, 31, 32, Fizz, 34, Buzz, Fizz, 37, 38, Fizz, Buzz, 41, Fizz, 43, 44, FizzBuzz, 46, 47, Fizz, 49, Buzz, Fizz, 52, 53, Fizz, Buzz, 56, Fizz, 58, 59, FizzBuzz, 61, 62, Fizz, 64, Buzz, Fizz, 67, 68, Fizz, Buzz, 71, Fizz, 73, 74, FizzBuzz, 76, 77, Fizz, 79, Buzz, Fizz, 82, 83, Fizz, Buzz, 86, Fizz, 88, 89, FizzBuzz, 91, 92, Fizz, 94, Buzz, Fizz, 97, 98, Fizz, Buzz
// 
    console.log(result.join(', ').trim());
};

calculateFizzBuzz2(1, 100);

const calculateFizzBuzz3 = (start, len) => {
    // 这种代码是混淆之后经常看到类似的 不知道为什么这么喜欢不给人看的东西 
    // 有时间写点汇编不好吗 至少人家效率高 这写法运行、编译、开发效率都不高 有什么意义
    let result = simpleRange(start, len).map(v =>
        ((v % 3 === 0 && v % 5 === 0) && 'FizzBuzz')
        || ((v % 3 === 0) && 'Fizz')
        || ((v % 5 === 0) && 'Buzz')
        || v
    );

    console.log(result.join(', ').trim());
};

calculateFizzBuzz3(1, 100);